
package webui;

// <editor-fold desc="IMPORTS">

//import namespaces JSF
import OpenCodes.Dominio.Jugador;
import OpenCodes.Dominio.Ciudad;
import com.sun.rave.faces.data.DefaultSelectItemsArray;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.rave.web.ui.component.Alert;
import com.sun.rave.web.ui.component.Body;
import com.sun.rave.web.ui.component.Button;
import com.sun.rave.web.ui.component.Calendar;
import com.sun.rave.web.ui.component.Label;
import com.sun.rave.web.ui.component.PanelLayout;
import com.sun.rave.web.ui.component.TabSet;
import com.sun.rave.web.ui.component.TextField;
import java.util.Date;
import java.util.List;
import javax.faces.FacesException;
import java.util.ArrayList;
//import javax.swing.*;

import javax.faces.component.html.HtmlDataTable;
//import javax.faces.context.FacesContext;
//Import de Limfic
/* Antiguo
import OpenCodes.Servicios.Jugador.IAltaJugadorServicio;
import OpenCodes.Servicios.Jugador.IBajaJugadorServicio;
import OpenCodes.Servicios.Jugador.IListadoJugadorServicio;
import OpenCodes.Servicios.Jugador.IModificarJugadorServicio;
*/

import OpenCodes.Servicios.Jugador.JugadorServicio;
import OpenCodes.Servicios.Ciudad.CiudadServicio;
import OpenCodes.Servicios.ServicioException;
import OpenCodes.UI.IUsuarioInterfazJugador;
import OpenCodes.UI.IUsuarioInterfazCiudad;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Locale;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.component.html.HtmlSelectOneRadio;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

// </editor-fold>
/**
 * Administracion Jugador. Permite Consulta, alta, modificacion y baja de un jugador.
 * @version AdministracionJugador.java
 * @version Created on 04-dic-2010, 22:42:03
 * @author OpenCodes (Nicolas Tenca, Luis Soto).
 */
public class AdministracionJugador extends AbstractPageBean implements IUsuarioInterfazJugador, IUsuarioInterfazCiudad {

    // <editor-fold defaultstate="collapsed" desc="DECLARACIONES">
    // ---Interfaces y Clases ------//
    private List<Jugador> listaJugadores;
    private List<Ciudad> listaCiudades;
    private List<Object> listaTablaJugadores;//Es la que se utilizara en la tabla de consulta
    private JugadorServicio abmJugadorServicio;
    private CiudadServicio abmCiudadServicio;
   
    // --------CONTROLES----------------//
    private Body body = new Body();
    private Label lblIdJugador = new Label();
    private TextField tfNombre = new TextField();
    private TextField tfApellido = new TextField();
    private TextField tfTelefono = new TextField();
    private TextField tfCalle = new TextField();
    private TextField tfNumero = new TextField();
    private TextField tfPiso = new TextField();
    private TextField tfDepto = new TextField();
    private TextField tfDni = new TextField();
    private TextField tfBuscarNombre = new TextField();
    private TextField tfBuscarApellido = new TextField();
    private TabSet tabSetJugador = new TabSet();
    private HtmlDataTable htmlTabla = new HtmlDataTable();
    private Button btnAgregar = new Button();
    private Button btnModificar = new Button();
    private Button btnEliminar = new Button();
    private Button btnBuscar = new Button();
    
    private HtmlSelectOneMenu cboCiudades = new HtmlSelectOneMenu();
    private Alert alerta = new Alert();
    private DefaultSelectItemsArray rdbSexoDefaultItems = new DefaultSelectItemsArray();
    private Calendar cldFechaNacimiento = new Calendar();
    private HtmlSelectOneRadio rdbSexo = new HtmlSelectOneRadio();
    private DefaultSelectItemsArray cboCiudadesDefaultItems = new DefaultSelectItemsArray();
    // --------Variables----------------//
    private String mensajeError;

    // </editor-fold>
    // <editor-fold defaultstate="collapsed" desc="GETS Y SETS DE CONTROLES">
    public Body getBody() {
        return body;
    }

    public void setBody(Body b) {
        this.body = b;
    }

    public Label getLblIdJugador() {
        return lblIdJugador;
    }

    public void setLblIdJugador(Label l) {
        this.lblIdJugador = l;
    }

    public TextField getTfNombre() {
        return tfNombre;
    }

    public void setTfNombre(TextField tf) {
        this.tfNombre = tf;
    }

    public TextField getTfApellido() {
        return tfApellido;
    }

    public void setTfApellido(TextField tf) {
        this.tfApellido = tf;
    }

    public TextField getTfTelefono() {
        return tfTelefono;
    }

    public void setTfTelefono(TextField tf) {
        this.tfTelefono = tf;
    }

    public TextField getTfCalle() {
        return tfCalle;
    }

    public void setTfCalle(TextField tf) {
        this.tfCalle = tf;
    }

    public TextField getTfNumero() {
        return tfNumero;
    }

    public void setTfNumero(TextField tf) {
        this.tfNumero = tf;
    }

    public TextField getTfPiso() {
        return tfPiso;
    }

    public void setTfPiso(TextField tf) {
        this.tfPiso = tf;
    }

    public TextField getTfDepto() {
        return tfDepto;
    }

    public void setTfDepto(TextField tf) {
        this.tfDepto = tf;
    }

    public TabSet getTabSetJugador() {
        return tabSetJugador;
    }

    public void setTabSetJugador(TabSet ts) {
        this.tabSetJugador = ts;
    }

    public Button getBtnAgregar() {
        return btnAgregar;
    }

    public void setBtnAgregar(Button b) {
        this.btnAgregar = b;
    }

    public Button getBtnModificar() {
        return btnModificar;
    }

    public void setBtnModificar(Button b) {
        this.btnModificar = b;
    }

    public Button getBtnEliminar() {
        return btnEliminar;
    }

    public void setBtnEliminar(Button b) {
        this.btnEliminar = b;
    }

    public List<Jugador> getListaJugadores() {
        return listaJugadores;
    }

    public List<Object> getlistaTablaJugadores() {
        return listaTablaJugadores;
    }

    public HtmlDataTable gethtmlTabla() {
        return htmlTabla;
    }

    public void sethtmlTabla(HtmlDataTable hdt) {
        this.htmlTabla = hdt;
    }

    public Alert getAlerta() {
        return alerta;
    }

    public void setAlerta(Alert a) {
        this.alerta = a;
    }

    public TextField getTfBuscarNombre() {
        return tfBuscarNombre;
    }

    public void setTfBuscarNombre(TextField tf) {
        this.tfBuscarNombre = tf;
    }

    public TextField getTfBuscarApellido() {
        return tfBuscarApellido;
    }

    public void setTfBuscarApellido(TextField tf) {
        this.tfBuscarApellido = tf;
    }

    public Button getBtnBuscar() {
        return btnBuscar;
    }

    public void setBtnBuscar(Button b) {
        this.btnBuscar = b;
    }

    public DefaultSelectItemsArray getCboCiudadesDefaultItems() {
        cboCiudadesDefaultItems.clear();
        //Item "seleccionar"
        SelectItem itemSeleccionar = new SelectItem();
        itemSeleccionar.setValue("0");
        itemSeleccionar.setLabel("<SELECCIONE>");
        cboCiudadesDefaultItems.add(itemSeleccionar);
        //items ciudades
        for (Ciudad c : listaCiudades) {
            SelectItem item = new SelectItem();
            item.setValue(String.valueOf(c.getId()));
            item.setLabel(c.getNombre());

            cboCiudadesDefaultItems.add(item);

        }

        return cboCiudadesDefaultItems;
    }

    public void setCboCiudadesDefaultItems(DefaultSelectItemsArray dsia) {
        cboCiudadesDefaultItems = dsia;
    }

    public HtmlSelectOneMenu getCboCiudades() {
        return cboCiudades;
    }

    public void setCboCiudades(HtmlSelectOneMenu hsom) {
        this.cboCiudades = hsom;
    }

    public Calendar getCldFechaNacimiento() {

        return cldFechaNacimiento;
    }

    public void setCldFechaNacimiento(Calendar c) {
        this.cldFechaNacimiento = c;
    }

    public TextField getTfDni() {
        return tfDni;
    }

    public void setTfDni(TextField tf) {
        this.tfDni = tf;
    }

    public DefaultSelectItemsArray getRdbSexoDefaultItems() {
        rdbSexoDefaultItems.clear();
        SelectItem itemMasculino = new SelectItem();
        itemMasculino.setValue("M");
        itemMasculino.setLabel("Masculino");
        rdbSexoDefaultItems.add(itemMasculino);
        SelectItem itemFemenino = new SelectItem();
        itemFemenino.setValue("F");
        itemFemenino.setLabel("Femenino");

        rdbSexoDefaultItems.add(itemFemenino);

        return rdbSexoDefaultItems;

    }

    public void setRdbSexoDefaultItems(DefaultSelectItemsArray dsia) {
        this.rdbSexoDefaultItems = dsia;
    }

    public HtmlSelectOneRadio getRdbSexo() {

        return rdbSexo;
    }

    public void setRdbSexo(HtmlSelectOneRadio hsor) {
        this.rdbSexo = hsor;
    }

    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="ACCIONES DE CONTROLES">
    public void tabOperaciones_action() {
        alerta.setVisible(false);
        alerta.setSummary("");
        body.setFocus("form:tabSetJugador:tabOperaciones:tfNombre");
        
    }

    /**
     * Metodo que se activa cuando se cambia al tabular consultar
     */
    public void tabConsultar_action() {
        if(alerta.getType().equals("warning")){
             alerta.setSummary("");
        }

        //Si la lista jugador ya fue ordenada en el tab de consulta, ordeno la lista devuelta
        //para no perder la persona seleccionada.
        if (getSessionBean1().sesTablaOrdenada) {
            /*  Leo el campoOrden de la sesion y ordeno.
             *  El tipo de ordenamiento (Ascendete o descendente) ya esta
             *  cargado en la sesion.*/
            ordenarListaJugadores(getSessionBean1().sesCampoOrden, getSessionBean1().sesOrdenAscendente);
        }

    }

    public void btnAgregar_action() {
        agregarJugador();

    }

    public void btnModificar_action() {

        modificarJugador();

    }

    public void btnEliminar_action() {
        //return "alert('clickeaste en el boton eliminar');";

        eliminarJugador();

    }

    public String btnLimpiar_action() {
       accionLimpiar();
        return null;
    }

    /*
    public String getOnclickButtonEliminar() {

        return "alert('Boton eliminar');";
    }*/

    public void btnBuscar_action() {
        buscarJugador();
    }


    public String linkCiudades_action() {

        this.getSessionBean1().paginaAnterior = "jugador";
        
        return "ciudad";
    }
    // </editor-fold>

    // <editor-fold desc="CONSTRUCTOR - INIT">
    private void _init() throws Exception {
    }

    public AdministracionJugador() {
        obtenerJugadores();
        obtenerCiudades();

        if (alerta.getSummary() == null) {
            alerta.setVisible(false);
        } else {
            alerta.setVisible(true);
        }

    }

    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();

        try {
            _init();
           
        } catch (Exception e) {
            log("Fallo inicializacion AdministracionJugador", e);
            throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
        }

    }

    // </editor-fold>

    // <editor-fold desc="PROCESOS BEAN">
    @Override
    public void preprocess() {
    }

    @Override
    public void prerender() {

        java.util.Calendar ahora = java.util.Calendar.getInstance();
        cldFechaNacimiento.setMaxDate(ahora.getTime());
       
    }

    @Override
    public void destroy() {
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }
    // </editor-fold>

    // <editor-fold desc="GETS DE CLASE JUGADOR">
    @Override
    public int getId() {

        Object id;
        id = lblIdJugador.getText().toString();
        //pregunto si valor del label Id.

        if (id == null) //si esta vacio entonces devuelvo 0 para agregar.
        {
            return 0;
        } else { //si no convierto el valor del label en entero.
            return Integer.valueOf(lblIdJugador.getText().toString());
        }

    }

    @Override
    public String getNombre() {
        //return Nombre;
        Object nombre;
        nombre = tfNombre.getText();

        if (nombre == null) {
            return "";
        }
        return nombre.toString().toUpperCase(); // convierte a mayusculas

    }

    @Override
    public String getApellido() {
        Object apellido;
        apellido = tfApellido.getText();
        if (apellido == null) {
            return "";
        }
        return apellido.toString().toUpperCase(); // convierte a mayusculas
    }

    @Override
    public String getTelefono() {

        Object telefono;
        telefono = tfTelefono.getText();
        if (telefono == null) {
            return "";
        }
        return telefono.toString().toUpperCase(); // convierte a mayusculas
    }

    @Override
    public String getCalle() {
        //return Calle;
        Object calle;
        calle = tfCalle.getText();
        if (calle == null) {
            return "";
        }
        return calle.toString().toUpperCase(); // convierte a mayusculas

    }

    @Override
    public int getNumero() {
        //return Numero;
        Object numero;
        numero = tfNumero.getText();

        if (numero == null || !esEntero(numero.toString())) {
            return 0;
        }
        return Integer.valueOf(numero.toString());
    }

    @Override
    public String getPiso() {
        //return Piso;
        Object piso;
        piso = tfPiso.getText();
        if (piso == null) {
            return "";
        }
        return piso.toString().toUpperCase(); //convierte a mayusculas
    }

    @Override
    public String getDepartamento() {
        Object depto;
        depto = tfDepto.getText();
        if (depto == null) {
            return "";
        }

        return depto.toString().toUpperCase(); // convierte a mayusculas
    }

    @Override
    public int getIdCiudad() {
        
        Object idCiudad;
        idCiudad = cboCiudades.getValue();

        if (idCiudad == null || !esEntero(idCiudad.toString())) {
            return 0;
        }
        return Integer.valueOf(idCiudad.toString());

    }

    @Override
    public String getNombreCiudad() {
        try {
            for (Ciudad c : listaCiudades) {
                if (getIdCiudad() == c.getId()) {
                    return c.getNombre();
                }
            }
            return "";
        } catch (java.lang.NullPointerException ex_nulo) {
            return "Ocurrio el siguiente error:" + ex_nulo.getMessage();
        }
  
    }

    @Override
    public int getDni() {

        //return dni;
        Object dni;
        dni = tfDni.getText();
        if (dni == null || !esEntero(dni.toString())) {
            return 0;
        }
        return Integer.valueOf(dni.toString());

    }

    @Override
    public Date getFechaNacimiento() {

        try {
            /*
            //Convierte a date de tipo SQL.date porque df.parse devuelve un Util.Date
            SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy",
                    Locale.getDefault());
            formatoFecha.setLenient(false);
            return (Date) formatoFecha.parse(cldFechaNacimiento.getText().toString());
             * */
            return cldFechaNacimiento.getSelectedDate();
        }catch(Exception e){
            return null;
        }/* catch (ParseException e) {

            return null;
        }*/

    }

    @Override
    public String getSexo() {
        if (rdbSexo.getValue() == null) {
            return "";
        } else {
            return rdbSexo.getValue().toString().toUpperCase();
        }
    }

    @Override
    public void setListaJugadores(List<Jugador> lista) {
        //throw new UnsupportedOperationException("Not supported yet.");
        this.listaJugadores = lista;
    }

    @Override
    public void setListaCiudades(List<Ciudad> lista) {
        this.listaCiudades = lista;

    }
    // </editor-fold>

    // <editor-fold desc="SECCION LISTADO Y CONSULTA">
    
    /**
     * Recupera las ciudades llamando al CiudadServicio y
     * <p> y los lista todas
     * </p>
     * @see CiudadServicio
     */
    private void obtenerCiudades() {
        try {

            abmCiudadServicio = new CiudadServicio();
            //abmCiudadServicio.init(this);
            abmCiudadServicio.init(this);
            abmCiudadServicio.listarTodas(this);

        } catch (ServicioException e) {
            alerta.setType("warning");
            mensajeError = e.toString();
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());
        }
    }

    /**
     * Recupera los jugadores llamando al IListadoJugadorServicio y
     * <p> y los lista todos
     * </p>
     * @see JugadorServicio
     * @see IListadoJugadorServicio
     */
    private void obtenerJugadores() {
        try {

            abmJugadorServicio = new JugadorServicio();
            abmJugadorServicio.init(this);
            //listadoJugadorServicio = (IListadoJugadorServicio) abmJugadorServicio;
            //listadoJugadorServicio.listarTodos(this);
            abmJugadorServicio.listarTodos(this);
            //Pregunta por ordenamiento
            if (getSessionBean1().sesTablaOrdenada) {
                /*  Leo el campoOrden de la sesion y ordeno.
                 *  El tipo de ordenamiento (Ascendete o descendente) ya esta
                 *  cargado en la sesion.*/
                ordenarListaJugadores(getSessionBean1().sesCampoOrden, getSessionBean1().sesOrdenAscendente);

            }
       
        } catch (ServicioException e) {
            mensajeError = e.toString();
            alerta.setType("warning");
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());

        } catch (javax.faces.FacesException e2) {
            alerta.setType("warning");
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e2.getMessage());
        }
    }


    /**
     * El metodo se ejecuta cuando el usuario hace click en una fila
     * Los datos se llenan obteniendo los campos de la tabla html de la pagina
     * No de la base de datos.
     * Cuando se leen los datos, se asignan en los controles del formulario.
     * Estos luego se utilizaran para hacer las operaciones de modificacion y eliminacion.
     * @return
     */
    public void editarfilaTabla() {

        try {
            Jugador j;
            j = (Jugador) htmlTabla.getRowData();
            String id;
            id = String.valueOf(j.getId());
            lblIdJugador.setText(id);
            tfNombre.setText(j.getNombre());
            tfApellido.setText(j.getApellido());
            tfTelefono.setText(j.getTelefono());
            
            if (j.getDireccionParticular() != null) {
                Object idCiudad;
                idCiudad = j.getDireccionParticular().getCiudad().getId();
                if (idCiudad != null) {
                    cboCiudades.setValue(String.valueOf(j.getDireccionParticular().getCiudad().getId()));
                } else {
                    cboCiudades.setValue("0");
                }
                Object calle;
                calle = j.getDireccionParticular().getCalle();
                if (calle != null) {
                    tfCalle.setText(j.getDireccionParticular().getCalle());
                } else {
                    tfCalle.setText("");
                }

                Object numero;
                numero = j.getDireccionParticular().getNumero();
                if (numero != null) {
                    tfNumero.setText(String.valueOf(j.getDireccionParticular().getNumero()));
                } else {
                    tfNumero.setText("");
                }
                Object piso;
                piso = j.getDireccionParticular().getPiso();
                if (piso != null) {
                    tfPiso.setText(j.getDireccionParticular().getPiso());
                } else {
                    tfPiso.setText("");
                }
                Object depto;
                depto = j.getDireccionParticular().getDepartamento();
                if (depto != null) {
                    tfDepto.setText(j.getDireccionParticular().getDepartamento());
                } else {
                    tfDepto.setText("");
                }
            } else {
                cboCiudades.setValue("0");
                tfCalle.setText("");
                tfNumero.setText("");
                tfPiso.setText("");
                tfDepto.setText("");
            }

            Object dni;
            dni = j.getDni();
            if (dni != null) {
                tfDni.setText(String.valueOf(j.getDni()));
            } else {
                tfDni.setText("");
            }

            //FechaNacimiento-----

            String fechaNacimiento;

            fechaNacimiento = String.valueOf(j.getFechaNacimiento());

            if (!fechaNacimiento.equals("null")) {
                //Si no esta vacia, entonces le doy formato dd/mm/yyyy
                SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
                formatoFecha.setLenient(false);
                fechaNacimiento = formatoFecha.format(j.getFechaNacimiento());
            } else {
                fechaNacimiento = "";
            }

            cldFechaNacimiento.setText(fechaNacimiento);
            rdbSexo.setValue(j.getSexo().toUpperCase());
            tabSetJugador.setSelected("tabOperaciones");
        } catch (Exception e) {
            alerta.setType("warning");
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());
        }
    }

    private void buscarJugador() {
        //---------------------------------------------------
        //Busqueda dentro de la lista de jugadores ya cargada

        /*for(Jugador j: listaJugadores){
        if(j.getNombre().contains(this.tfNombre.getText().toString())
        && j.getApellido().contains(this.tfApellido.getText().toString()))
        {
        listaBusqueda.add(j);
        
        }
        }        llenarTablaJugadores(listaBusqueda);*/
        //---------------------

        //-----------------------------------------------
        // Busqueda contra la base de datos.

        try {
            //Si es valido tfBuscarNombre y tfBuscarApellido
            if (validarBuscar()) {
                String nombre = tfBuscarNombre.getText().toString();
                String apellido = tfBuscarApellido.getText().toString();
                abmJugadorServicio = new JugadorServicio();
                abmJugadorServicio.init(this);
                //listadoJugadorServicio = (IListadoJugadorServicio) abmJugadorServicio;
                //listadoJugadorServicio.listarAlgunos(this, nombre, apellido);
                abmJugadorServicio.listarAlgunos(this, nombre, apellido);
                //Pregunta por ordenamiento
                if (getSessionBean1().sesTablaOrdenada) {
                    /*  Leo el campoOrden de la sesion y ordeno.
                     *  El tipo de ordenamiento (Ascendete o descendente) ya esta
                     *  cargado en la sesion.*/
                    ordenarListaJugadores(getSessionBean1().sesCampoOrden, getSessionBean1().sesOrdenAscendente);

                }
            
            } else {

                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error:" + mensajeError);

            //return "alert('Error: " + mensajeError + " (1)');";
            }
        } catch (ServicioException e) {
            mensajeError = e.toString();
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());

        //return "alert('Error: " + mensajeError + " (2)');";

        } catch (javax.faces.FacesException e) {
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());

        } catch (Exception e) {
            alerta.setType("warning");
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());
        }
    }
    // </editor-fold>

    // <editor-fold desc="SECCION ORDENADO Y PAGINACION">
    public void ordenarListaJugadores(String campo, boolean tipoOrden) {
        try {
            if (tipoOrden) { //si es ascendente
                //Ordeno la lista
                Collections.sort(listaJugadores, new CompararJugador(campo, true));
            } else {
                //Ordeno la lista
                Collections.sort(listaJugadores, new CompararJugador(campo, false));
            }
            //Actualizo tabla (cambio: ya no es necesario: leo desde la listaJugadores
            //(listaJugadores);
            //Establezco variables de sesion para no perder el ordenado en el postback
            getSessionBean1().sesTablaOrdenada = true;
            getSessionBean1().sesCampoOrden = campo;
        } catch (Exception e) {
            alerta.setType("warning");
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());
        }
    }

    public void ordenarListaPorNombre() {
        try {
            //Invierto el orden para siguinte ordenamiento
            // sesOrdenAscendente se usara en los click de la tabla en el tabConsulta.
            getSessionBean1().sesOrdenAscendente = !getSessionBean1().sesOrdenAscendente;
            ordenarListaJugadores("Nombre", getSessionBean1().sesOrdenAscendente);
        } catch (Exception e) {
            alerta.setType("warning");
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());
        }

    }

    public void ordenarListaPorApellido() {
        try {
            //Invierto el orden para siguinte ordenamiento
            // sesOrdenAscendente se usara en los click de la tabla en el tabConsulta.
            getSessionBean1().sesOrdenAscendente = !getSessionBean1().sesOrdenAscendente;
            ordenarListaJugadores("Apellido", getSessionBean1().sesOrdenAscendente);

        } catch (Exception e) {
            alerta.setType("warning");
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());
        }
    }

    public void ordenarListaPorTelefono() {
        try {
            //Invierto el orden para siguinte ordenamiento
            // sesOrdenAscendente se usara en los click de la tabla en el tabConsulta.
            getSessionBean1().sesOrdenAscendente = !getSessionBean1().sesOrdenAscendente;
            ordenarListaJugadores("Telefono", getSessionBean1().sesOrdenAscendente);

        } catch (Exception e) {
            alerta.setType("warning");
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());
        }
    }

    public void ordenarListaPorCiudad() {
        try {
            //Invierto el orden para siguinte ordenamiento
            // sesOrdenAscendente se usara en los click de la tabla en el tabConsulta.
            getSessionBean1().sesOrdenAscendente = !getSessionBean1().sesOrdenAscendente;
            ordenarListaJugadores("Ciudad", this.getSessionBean1().sesOrdenAscendente);

        } catch (Exception e) {
            alerta.setType("warning");
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());
        }
    }

    public void pageFirst() {
        htmlTabla.setFirst(0);
    }

    public void pagePrevious() {
        htmlTabla.setFirst(htmlTabla.getFirst() - htmlTabla.getRows());
    }

    public void pageNext() {
        htmlTabla.setFirst(htmlTabla.getFirst() + htmlTabla.getRows());
    }

    public void pageLast() {
        int count = htmlTabla.getRowCount();
        int rows = htmlTabla.getRows();
        htmlTabla.setFirst(count - ((count % rows != 0) ? count % rows : rows));
    }

    public int getCurrentPage() {
        int rows = htmlTabla.getRows();
        int first = htmlTabla.getFirst();
        int count = htmlTabla.getRowCount();
        return (count / rows) - ((count - first) / rows) + 1;
    }

    public int getTotalPages() {
        int rows = htmlTabla.getRows();
        int count = htmlTabla.getRowCount();
        return (count / rows) + ((count % rows != 0) ? 1 : 0);
    }
    // </editor-fold>

    // <editor-fold desc="ACCION LIMPIAR">
    private void accionLimpiar() {
        lblIdJugador.setText(null);
        tfApellido.setText(null);
        tfNombre.setText(null);
        tfTelefono.setText(null);
        tfCalle.setText(null);
        tfNumero.setText(null);
        tfPiso.setText(null);
        tfDepto.setText(null);
        cldFechaNacimiento.setValue(null);
        cboCiudades.setValue("0");
        tfDni.setText(null);

        alerta.setSummary("");
        alerta.setVisible(false);
        body.setFocus("form:tabSetJugador:tabOperaciones:tfNombre");
    }
    // </editor-fold>

    // <editor-fold desc="VALIDACIONES">
    public boolean esEntero(String cadena) {

        try {
            int x = Integer.parseInt(cadena);
            return true;
        } catch (NumberFormatException a) {
            return false;
        }
    }

    private static boolean esFechaValida(String fechax) {
        try {
            SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy",
                    Locale.getDefault());
            formatoFecha.setLenient(false);
            formatoFecha.parse(fechax);
        } catch (ParseException e) {
            return false;
        }

        return true;
    }

    public boolean validarAgregar() {
        try {
            if (getNombre().isEmpty()) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfNombre");
                mensajeError = "Debe ingresar un nombre";
                return false;
            }
            if (getApellido().isEmpty()) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfApellido");
                mensajeError = "Debe ingresar un apellido";
                return false;
            }
            if (getTelefono().isEmpty()) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfTelefono");
                mensajeError = "Debe ingresar un telefono";
                return false;
            }
            if (getIdCiudad() <= 0) {
                body.setFocus("form:tabSetJugador:tabOperaciones:cboCiudades");
                mensajeError = "Debe seleccionar una ciudad";
                return false;
            }
            /*
            if (this.getId()<=0){
            mensajeError="Debe seleccionar una ciudad";
            return false;
            }
             */

            if (getCalle().isEmpty()) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfCalle");
                mensajeError = "Debe ingresar una calle";
                return false;
            }

            if (getNumero() <= 0) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfNumero");
                mensajeError = "Debe ingresar un numero";
                return false;
            }
            if (!getPiso().isEmpty() && !esEntero(getPiso()) && !getPiso().equals("P.B.")) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfPiso");
                mensajeError = "Debe ingresar el valor piso";
                return false;
            }
            if (esEntero(getPiso())) {
                if (Integer.valueOf(getPiso()) <= 0) {
                    body.setFocus("form:tabSetJugador:tabOperaciones:tfPiso");
                    mensajeError = "Debe ingresar el valor piso mayor a 0";
                    return false;
                }
            }
            if (!getPiso().isEmpty() && getDepartamento().isEmpty()) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfDepto");
                mensajeError = "Debe ingresar el valor departamento";
                return false;
            }
            if (esEntero(getDepartamento())) {
                if (Integer.valueOf(getDepartamento()) <= 0) {
                    body.setFocus("form:tabSetJugador:tabOperaciones:tfDepto");
                    mensajeError = "Debe ingresar el valor departamento mayor a 0";
                    return false;
                }
            }
            if (getDni() <= 0) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfDni");
                mensajeError = "Debe ingresar un DNI";
                return false;
            }

            if (cldFechaNacimiento.getText() == null) {
                body.setFocus("form:tabSetJugador:tabOperaciones:cldFechaNacimiento");
                mensajeError = "Debe ingresar una fecha de Nacimiento";
                return false;
            }

            if (getFechaNacimiento().equals(null)) {
                body.setFocus("form:tabSetJugador:tabOperaciones:cldFechaNacimiento");
                mensajeError = "Debe ingresar una fecha de Nacimiento valida";
            }
            if (getSexo().equals("")) {
                body.setFocus("form:tabSetJugador:tabOperaciones:rdbSexo");
                mensajeError = "Debe seleccionar el sexo";
                return false;
            }

            return true;

        } catch (Exception e) {
            mensajeError = "Validacion incorrecta: " + e.getCause();
            return false;
        }

    }

    public boolean validarModificar() {
        try {
            if (getNombre().isEmpty()) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfNombre");
                mensajeError = "Debe ingresar un nombre";
                return false;
            }
            if (getApellido().isEmpty()) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfApellido");
                mensajeError = "Debe ingresar un apellido";
                return false;
            }
            if (getTelefono().isEmpty()) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfTelefono");
                mensajeError = "Debe ingresar un telefono";
                return false;
            }
            if (getIdCiudad() <= 0) {
                body.setFocus("form:tabSetJugador:tabOperaciones:cboCiudades");
                mensajeError = "Debe seleccionar una ciudad";
                return false;
            }
            if (getCalle().isEmpty()) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfCalle");
                mensajeError = "Debe ingresar una calle";
                return false;
            }

            if (getNumero() == 0) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfNumero");
                mensajeError = "Debe ingresar un numero";
                return false;
            }
            if (!getPiso().isEmpty() && !esEntero(getPiso()) && !getPiso().equals("P.B.")) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfPiso");
                mensajeError = "Debe ingresar el valor piso";
                return false;
            }
            if (esEntero(getPiso())) {
                if (Integer.valueOf(getPiso()) <= 0) {
                    body.setFocus("form:tabSetJugador:tabOperaciones:tfPiso");
                    mensajeError = "Debe ingresar el valor piso mayor a 0";
                    return false;
                }
            }
            if (!getPiso().isEmpty() && getDepartamento().isEmpty()) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfDepto");
                mensajeError = "Debe ingresar el valor departamento";
                return false;
            }
            if (esEntero(getDepartamento())) {
                if (Integer.valueOf(getDepartamento()) <= 0) {
                    body.setFocus("form:tabSetJugador:tabOperaciones:tfDepto");
                    mensajeError = "Debe ingresar el valor departamento mayor a 0";
                    return false;
                }
            }

            if (getDni() <= 0) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfDni");
                mensajeError = "Debe ingresar un DNI";
                return false;
            }

            if (cldFechaNacimiento.getText() == null) {
                body.setFocus("form:tabSetJugador:tabOperaciones:cldFechaNacimiento");
                mensajeError = "Debe ingresar una fecha de Nacimiento";
                return false;
            }

            if (getFechaNacimiento().equals(null)) {
                body.setFocus("form:tabSetJugador:tabOperaciones:cldFechaNacimiento");
                mensajeError = "Debe ingresar una fecha de Nacimiento valida";
            }
            if (getSexo().equals("")) {
                body.setFocus("form:tabSetJugador:tabOperaciones:rdbSexo");
                mensajeError = "Debe seleccionar el sexo";
                return false;
            }
            return true;

        } catch (Exception e) {
            mensajeError = "Validacion incorrecta: " + e.getCause();
            return false;

        }
        
    }

    public boolean validarBuscar() {
        try {
            Object buscarNombre;
            buscarNombre = tfBuscarNombre.getText();
            if (buscarNombre == null) {
                mensajeError = "Debe ingresar un nombre";
                body.setFocus("form:tabSetJugador:tabConsultar:tfBuscarNombre");
                return false;
            }
            Object buscarApellido;
            buscarApellido = tfBuscarApellido.getText();
            if (buscarApellido == null) {
                mensajeError = "Debe ingresar un apellido";
                body.setFocus("form:tabSetJugador:tabConsultar:tfBuscarApellido");
                return false;
            }
            return true;
        } catch (Exception e) {
            mensajeError = "Validacion incorrecta: " + e.getCause();
            return false;

        }
        
    }
    // </editor-fold>

    // <editor-fold desc="SECCION AGREGAR">
    private String agregarJugador() {
        if (isPostBack()) {
            try {

                boolean esValido;
                esValido = validarAgregar();
                if (esValido == false) {
                    alerta.setType("warning");
                    alerta.setVisible(true);
                    alerta.setSummary("Error:" + mensajeError);

                    return "Error";
                }
                abmJugadorServicio = new JugadorServicio();
                abmJugadorServicio.init(this);
                abmJugadorServicio.agregar(this);
                
                accionLimpiar();
                obtenerJugadores();
                alerta.setType("success");
                alerta.setVisible(true);
                alerta.setSummary("Jugador guardado con exito");
                tabSetJugador.setSelected("tabConsultar");
                obtenerJugadores();
                return "OK";

            } catch (ServicioException e1) {

                mensajeError = "Error al agregar una jugador: ";
                mensajeError = mensajeError.concat(e1.getMessage());
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary(mensajeError);
                return "Error: " + e1.getMessage();
            } catch (javax.faces.FacesException e2) {
                alerta.setType("warning");
                mensajeError = "Error al agregar un jugador ";
                mensajeError = mensajeError.concat(e2.getCause().toString());
                alerta.setVisible(true);
                alerta.setSummary(mensajeError);

                return "Error: " + e2.toString();
            } catch (java.lang.Exception e3) {
                alerta.setType("warning");
                mensajeError = "Error al agregar un jugador ";
                mensajeError = mensajeError.concat(e3.getCause().toString());
                alerta.setSummary(mensajeError);
                return "Error";
            }
        } else {
            return null;
        }
    }

    // </editor-fold>

    //<editor-fold desc="SECCION MODIFICAR">
    private String modificarJugador() {

        if (isPostBack()) {
            try {
                boolean esValido;
                esValido = validarModificar();
                if (esValido == false) {
                    alerta.setVisible(true);
                    alerta.setSummary("Error: " + mensajeError);
                    return "Error";
                }
                abmJugadorServicio = new JugadorServicio();
                abmJugadorServicio.init(this);
                abmJugadorServicio.modificar(this);
                accionLimpiar();
                alerta.setType("success");
                alerta.setVisible(true);
                alerta.setSummary("Jugador modificado con exito");
                tabSetJugador.setSelected("tabConsultar");
                obtenerJugadores();
                return "OK";
            } //Servicio Exception lanzado por el servicio
            catch (ServicioException e1) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + e1.getMessage());

                return "Error: " + e1.getMessage();
            } catch (javax.faces.FacesException e2) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + e2.getMessage());
                return "Error: " + e2.getMessage();
            } catch (Exception ex4) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + ex4.getMessage());
                return "Error: " + ex4.getMessage();
            }
        } else {
            return null;
        }

    }
    // </editor-fold>

    // <editor-fold desc="SECCION ELIMINAR">
    private String eliminarJugador() {
        if (isPostBack()) {
            try {
                abmJugadorServicio = new JugadorServicio();
                abmJugadorServicio.init(this);
                abmJugadorServicio.eliminar(this);
                obtenerJugadores();
                accionLimpiar();
                alerta.setType("success");
                alerta.setVisible(true);
                alerta.setSummary("Jugador eliminado con exito");
                tabSetJugador.setSelected("tabConsultar");

                return "OK";
            } catch (ServicioException e1) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + e1.getMessage());

                return "Error: " + e1.getMessage();
            } catch (javax.faces.FacesException e2) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + e2.getMessage());
                return "Error: " + e2.getMessage();
            } catch (Exception ex4) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + ex4.getMessage());
                return "Error: " + ex4.getMessage();
            }
        } else {
            return null;
        }

    }


    // </editor-fold>

}

